home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow_WinXP / VMR / VMRXcl / vcdplyer.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-10  |  4.7 KB  |  139 lines

  1. //----------------------------------------------------------------------------
  2. //  File:   vcdplyer.h
  3. //
  4. //  Desc:   DirectShow sample code
  5. //          Prototype for CMpegMovie, a customized video player
  6. //
  7. //  Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
  8. //----------------------------------------------------------------------------
  9. #include <ddraw.h>
  10. #define D3D_OVERLOADS
  11. #include <d3d.h>
  12.  
  13. #include "DDrawSupport.h"
  14. #include "BltAlpha.h"
  15. #include "d3dtextr.h"
  16.  
  17. /* -------------------------------------------------------------------------
  18. ** CMpegMovie - a movie playback class.
  19. ** -------------------------------------------------------------------------
  20. */
  21. enum EMpegMovieMode { MOVIE_NOTOPENED = 0x00,
  22.                       MOVIE_OPENED = 0x01,
  23.                       MOVIE_PLAYING = 0x02,
  24.                       MOVIE_STOPPED = 0x03,
  25.                       MOVIE_PAUSED = 0x04 };
  26.  
  27.  
  28. //----------------------------------------------------------------------------\
  29. //  CMpegMovie
  30. //
  31. //  A customized video player for exclusive DDraw mode. In fact, it is a
  32. //  user-provided Allocator-Presenter for VMR
  33. //----------------------------------------------------------------------------
  34. class CMpegMovie :
  35.     public CUnknown,
  36.     public IVMRSurfaceAllocator,
  37.     public IVMRImagePresenter,
  38.     public IVMRSurfaceAllocatorNotify
  39. {
  40.  
  41. private:
  42.     // Our state variable - records whether we are opened, playing etc.
  43.     EMpegMovieMode  m_Mode;
  44.     HANDLE          m_MediaEvent;
  45.     HWND            m_hwndApp;
  46.     int             m_iDuration;
  47.     GUID            m_TimeFormat;
  48.  
  49.     CDDrawObject    m_pDDObject;
  50.     CAlphaBlt*      m_AlphaBlt;
  51.     LPDIRECTDRAWSURFACE7 m_lpSurf;
  52.  
  53.     IBaseFilter*                m_pBF;  // ptr to the VMR
  54.     IFilterGraph*               m_Fg;
  55.     IGraphBuilder*              m_Gb;
  56.     IMediaControl*              m_Mc;
  57.     IMediaSeeking*              m_Ms;
  58.     IMediaEvent*                m_Me;
  59.     IQualProp*                  m_Qp;
  60.  
  61.  
  62.     IVMRSurfaceAllocator*       m_lpDefSA;
  63.     IVMRImagePresenter*         m_lpDefIP;
  64.     IVMRWindowlessControl*      m_lpDefWC;
  65.     IVMRSurfaceAllocatorNotify* m_lpDefSAN;
  66.  
  67.  
  68.     HRESULT CreateDefaultAllocatorPresenter(LPDIRECTDRAW7 lpDD, LPDIRECTDRAWSURFACE7 lpPS);
  69.     HRESULT AddVideoMixingRendererToFG();
  70.     HRESULT OnSetDDrawDevice(LPDIRECTDRAW7 pDD, HMONITOR hMon);
  71.     HRESULT AllocateAlphaBlt(void);
  72.  
  73. public:
  74.      CMpegMovie(HWND hwndApplication);
  75.     ~CMpegMovie();
  76.  
  77.     DECLARE_IUNKNOWN
  78.     STDMETHODIMP NonDelegatingQueryInterface(REFIID, void**);
  79.  
  80. // IVMRSurfaceAllocator
  81.     STDMETHODIMP AllocateSurface(DWORD_PTR dwUserID,
  82.                                 VMRALLOCATIONINFO* lpAllocInfo,
  83.                                  DWORD* lpdwActualBackBuffers,
  84.                                  LPDIRECTDRAWSURFACE7* lplpSurface);
  85.     STDMETHODIMP FreeSurface(DWORD_PTR dwUserID);
  86.     STDMETHODIMP PrepareSurface(DWORD_PTR dwUserID,
  87.                                 LPDIRECTDRAWSURFACE7 lplpSurface,
  88.                                 DWORD dwSurfaceFlags);
  89.     STDMETHODIMP AdviseNotify(IVMRSurfaceAllocatorNotify* lpIVMRSurfAllocNotify);
  90.  
  91. // IVMRSurfaceAllocatorNotify
  92.     STDMETHODIMP AdviseSurfaceAllocator(DWORD_PTR dwUserID,
  93.                                         IVMRSurfaceAllocator* lpIVRMSurfaceAllocator);
  94.     STDMETHODIMP SetDDrawDevice(LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor);
  95.     STDMETHODIMP ChangeDDrawDevice(LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor);
  96.     STDMETHODIMP RestoreDDrawSurfaces();
  97.     STDMETHODIMP NotifyEvent(LONG EventCode, LONG_PTR lp1, LONG_PTR lp2);
  98.     STDMETHODIMP SetBorderColor(COLORREF clr);
  99.  
  100.  
  101. // IVMRImagePresenter
  102.     STDMETHODIMP StartPresenting(DWORD_PTR dwUserID);
  103.     STDMETHODIMP StopPresenting(DWORD_PTR dwUserID);
  104.     STDMETHODIMP PresentImage(DWORD_PTR dwUserID,
  105.                               VMRPRESENTATIONINFO* lpPresInfo);
  106.  
  107.  
  108.     HRESULT         OpenMovie(TCHAR *lpFileName);
  109.     DWORD           CloseMovie();
  110.  
  111.     BOOL            PlayMovie();
  112.     BOOL            PauseMovie();
  113.     BOOL            StopMovie();
  114.  
  115.     OAFilterState   GetStateMovie();
  116.  
  117.     HANDLE          GetMovieEventHandle();
  118.     long            GetMovieEventCode();
  119.  
  120.     BOOL            PutMoviePosition(LONG x, LONG y, LONG cx, LONG cy);
  121.  
  122.     REFTIME         GetDuration();
  123.     REFTIME         GetCurrentPosition();
  124.     BOOL            SeekToPosition(REFTIME rt,BOOL bFlushData);
  125.  
  126.     BOOL            RepaintVideo(HWND hwnd, HDC hdc);
  127.  
  128.     void            DisplayModeChanged() {
  129.         if (m_lpDefWC) {
  130.             m_lpDefWC->DisplayModeChanged();
  131.         }
  132.     }
  133.     IVMRWindowlessControl* GetWLC() {
  134.         return m_lpDefWC;
  135.     }
  136.  
  137.     void    GetPerformance( void);
  138. };
  139.